home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / M2Crypto / AuthCookie.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  4KB  |  121 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. import Rand
  5. import m2
  6. import Cookie
  7. import binascii
  8. import re
  9. import time
  10. _MIX_FORMAT = 'exp=%s&data=%s&digest='
  11. _MIX_RE = re.compile('exp=(\\d+\\.\\d+)&data=(.+)&digest=(\\S*)')
  12.  
  13. def mix(expiry, data, format = _MIX_FORMAT):
  14.     return format % (repr(expiry), data)
  15.  
  16.  
  17. def unmix(dough, regex = _MIX_RE):
  18.     mo = regex.match(dough)
  19.     if mo:
  20.         return (float(mo.group(1)), mo.group(2))
  21.     else:
  22.         return None
  23.  
  24.  
  25. def unmix3(dough, regex = _MIX_RE):
  26.     mo = regex.match(dough)
  27.     if mo:
  28.         return (float(mo.group(1)), mo.group(2), mo.group(3))
  29.     else:
  30.         return None
  31.  
  32. _TOKEN = '_M2AUTH_'
  33.  
  34. class AuthCookieJar:
  35.     _keylen = 20
  36.     
  37.     def __init__(self):
  38.         self._key = Rand.rand_bytes(self._keylen)
  39.  
  40.     
  41.     def _hmac(self, key, data):
  42.         return binascii.b2a_base64(m2.hmac(key, data, m2.sha1()))[:-1]
  43.  
  44.     
  45.     def makeCookie(self, expiry, data):
  46.         dough = mix(expiry, data)
  47.         return AuthCookie(expiry, data, dough, self._hmac(self._key, dough))
  48.  
  49.     
  50.     def isGoodCookie(self, cookie):
  51.         if cookie.isExpired():
  52.             return 0
  53.         
  54.         c = self.makeCookie(cookie._expiry, cookie._data)
  55.         if c._expiry == cookie._expiry and c._data == cookie._data and c._mac == cookie._mac:
  56.             pass
  57.         return c.output() == cookie.output()
  58.  
  59.     
  60.     def isGoodCookieString(self, cookie_str):
  61.         c = Cookie.SmartCookie()
  62.         c.load(cookie_str)
  63.         if not c.has_key(_TOKEN):
  64.             return 0
  65.         
  66.         undough = unmix3(c[_TOKEN].value)
  67.         if undough is None:
  68.             return 0
  69.         
  70.         (exp, data, mac) = undough
  71.         c2 = self.makeCookie(exp, data)
  72.         if not c2.isExpired():
  73.             pass
  74.         return c2._mac == mac
  75.  
  76.  
  77.  
  78. class AuthCookie:
  79.     
  80.     def __init__(self, expiry, data, dough, mac):
  81.         self._expiry = expiry
  82.         self._data = data
  83.         self._mac = mac
  84.         self._cookie = Cookie.SmartCookie()
  85.         self._cookie[_TOKEN] = '%s%s' % (dough, mac)
  86.         self._name = '%s%s' % (dough, mac)
  87.  
  88.     
  89.     def expiry(self):
  90.         return self._expiry
  91.  
  92.     
  93.     def data(self):
  94.         return self._data
  95.  
  96.     
  97.     def mac(self):
  98.         return self._mac
  99.  
  100.     
  101.     def output(self):
  102.         return self._cookie.output()
  103.  
  104.     
  105.     def value(self):
  106.         return self._cookie[_TOKEN].value
  107.  
  108.     
  109.     def isExpired(self):
  110.         return time.time() > self._expiry
  111.  
  112.     
  113.     def name(self):
  114.         return self._name
  115.  
  116.     
  117.     def headerValue(self):
  118.         return self.value()
  119.  
  120.  
  121.